//package com.yunhe.device.service.device;
//
//import com.yunhe.device.domain.base.PointDataType;
//import com.yunhe.device.domain.device.Analog;
//import com.yunhe.common.exception.ArgumentErrorException;
//import com.yunhe.common.exception.DatabaseProcessException;
//import com.yunhe.common.exception.ObjectNotFoundException;
//import com.yunhe.common.exception.UniqueConstraintsException;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.List;
//import java.util.Map;
//
///**
// * 点表Service
// * @author liuronglei
// * @desc 点表服务类定义
// */
//public interface AnalogService {
//
//    /**
//     * 新增点表
//     * @param analog 点表对象
//     */
//    @Transactional
//    Analog createAnalog(Analog analog)
//            throws ArgumentErrorException, UniqueConstraintsException;
//
//    /**
//     * 批量新增点表
//     * @param list 点表列表
//     */
//    @Transactional
//    Iterable<Analog> createAnalog(List<Analog> list)
//            throws ArgumentErrorException, UniqueConstraintsException;
//
//    /**
//     * 根据ID删除点表
//     * @param id 点表ID
//     */
//    @Transactional
//    void deleteAnalog(Long id);
//
//    /**
//     * 根据点号删除点表记录
//     * @param pointNumber 点号
//     */
//    @Transactional
//    Long deleteAnalogByPointNumber(Long pointNumber);
//
//    /**
//     * 根据设备代码和类型代码删除点表记录
//     * @param devCode 设备代码
//     * @param typeCode 点号数据类型代码
//     */
//    @Transactional
//    Long deleteAnalogByDevCodeAndTypeCode(Long devCode, Long typeCode);
//
//    /**
//     * 根据代码删除点表记录
//     * @param code 代码
//     */
//    @Transactional
//    void deleteAnalogByCode(Long code);
//
//    /**
//     * 更新点表
//     * @param code 代码
//     * @param analog 要更新的点表对象
//     * @return
//     */
//    @Transactional
//    Analog updateAnalog(Long code, Analog analog)
//            throws ArgumentErrorException, UniqueConstraintsException, ObjectNotFoundException;
//
//    /**
//     * 更新点表记录
//     * @param analogId id
//     * @param name 编号
//     * @param code 代码
//     * @param pathName 路径
//     * @param devCode 设备代码
//     * @param typeCode 点号数据类型代码
//     * @param pointNumber 点号
//     * @param transformRatio 倍率
//     */
//    @Transactional
//    Analog updateAnalog(Long analogId,
//                        String name,
//                        Long code,
//                        String pathName,
//                        Long devCode,
//                        Long typeCode,
//                        Long pointNumber,
//                        Double transformRatio)
//            throws ArgumentErrorException, ObjectNotFoundException, UniqueConstraintsException;
//
//    /**
//     * 根据ID获得点表记录
//     * @param id id
//     */
//    Analog findByAnalogId(Long id);
//
//    /**
//     * 根据代码获得点表记录
//     * @param code 代码
//     */
//    Analog findByCode(Long code);
//
////    /**
////     * 获得所有点表记录（根据单位代码）
////     */
////    Iterable<Analog> findAnalogs(Long firmCode);
//
//    /**
//     * 获得所有点表记录
//     */
//    Iterable<Analog> findAnalogs();
//
//    /**
//     * 根据点号获得所有点表记录
//     * @param pointNumber 点号
//     */
//    Iterable<Analog> findAnalogsByPointNumber(Long pointNumber);
//
//    /**
//     * 根据设备代码和点号类型代码和端子获得点表对象
//     * @param devCode 设备代码
//     * @param typeCode 点号数据类型代码
//     * @param terminal 端子
//     * @param meter 表计编号
//     */
//    Analog findAnalogsByDevCodeAndTypeCode(Long devCode, Long typeCode, String terminal, String meter);
//
//    Iterable<Analog> findAnalogsByDevCodeAndTypeCode(List<Long> devCodeList, List<Long> typeCode);
//
//    /**
//     * 根据代码绑定点表数据类型
//     * @param code 点表代码
//     * @param pointDataTypeCode 点表数据类型代码
//     */
//    @Transactional
//    void bindPointDataTypeByCode(Long code, Long pointDataTypeCode)
//            throws DatabaseProcessException;
//
//    /**
//     * 根据代码解绑点表数据类型
//     * @param code 点表代码
//     * @param pointDataTypeCode 点表数据类型代码
//     */
//    @Transactional
//    void unbindPointDataTypeByCode(Long code, Long pointDataTypeCode)
//            throws DatabaseProcessException;
//
//    /**
//     * 获取点表绑定的点号数据类型（根据代码）
//     * @param code
//     * @return
//     */
//    Iterable<PointDataType> getPointDataTypeByCode(Long code);
//
//    /**
//     * 更新点表绑定的点号数据类型（根据代码）
//     * @param code
//     * @param pointDataTypeCodes
//     */
//    void updatePointDataTypeByCode(Long code, List<Long> pointDataTypeCodes)
//            throws DatabaseProcessException;
//
//    /**
//     * 根据代码获取点表
//     * @param analogCode 点表code
//     * @return
//     */
//    Analog getAnalogsByCode(Long analogCode)
//            throws ArgumentErrorException;
//
//    /**
//     * 修改点表（修改指定字段）
//     * @param code 点表代码
//     * @param name 点表编号
//     * @param title 标题
//     * @param pathName 路径名
//     * @param devCode 设备代码
//     * @param typeCode 点号数据类型代码
//     * @param pointNumber 点号
//     * @param transformRatio 倍率，默认1
//     * @param terminal 端子
//     * @param isForShow 是否用于展示
//     * @param upperLimit 上限值
//     * @param lowerLimit 下限值
//     */
//    @Transactional
//    Analog updateAnalogByCode(Long code,
//                              String name,
//                              String title,
//                              String pathName,
//                              Long devCode,
//                              Long typeCode,
//                              Long pointNumber,
//                              Double transformRatio,
//                              String terminal,
//                              String formula,
//                              Boolean isForShow,
//                              Double upperLimit,
//                              Double lowerLimit,
//                              String sn,
//                              String officeName)
//            throws ArgumentErrorException, ObjectNotFoundException, UniqueConstraintsException;
//
//    /**
//     * 根据设备代码获取设备的全部点表
//     * @param devCode 设备代码
//     * @param pointMeasureTypeCode
//     * @param isForShow
//     */
//    Iterable<Analog> getAnalogsByDevCode(Long devCode, Long pointMeasureTypeCode, Boolean isForShow);
//
//    /**
//     * 根据设备ID查找点号
//     * @param devIdList 设备ID列表
//     */
//    Iterable<Analog> findAnalogsByDevId(List<Long> devIdList);
//
//    /**
//     * 查找所有带公式的点号
//     */
//    Iterable<Analog> findAnalogsByFormulaNotNull();
//
//    Iterable<Analog> findAnalogsByFirm(Long firmCode);
//
//    Iterable<Analog> findAnalogsByFormulaType(Long firmCode, String formulaType);
//
//    /**
//     * 根据采集频率查询点号
//     * @param frequency 采集频率
//     */
//    Iterable<Analog> findAnalogsByFrequency(Integer frequency);
//
//    /**
//     * 根据设备代码列表查询点表
//     * @param devCodeList 设备代码列表
//     */
//    Iterable<Analog> findAnalogsByDevCodeList(List<Long> devCodeList);
//
//    /**
//     * 根据电池组ID查询单体电池电压、温度点号
//     * @param packId 电池组ID
//     */
//    List<Long> findBatteryPnByPackAndDataType(Long packId, List<Long> pointDataTypeCodeList);
//
//    /**
//     * 根据设备ID和子设备标签以及点号类型获得点号列表
//     * @param deviceId 设备ID
//     * @param childType 子设备标签
//     * @param pdtCodeList 点号类型
//     */
//    Iterable<Analog> findChildAnalogsDevIdAndType(Long deviceId,
//                                                  String childType,
//                                                  List<Long> pdtCodeList);
//
//    List<Analog> findAnalogsByDevIdAndTypeCode(Long devId,
//                                               Long typeCode,
//                                               String terminal,
//                                               String meter);
//
//    Map<Long, List<Long>> findCompanyPointNumber(Long firmId,
//                                                 Long stationId,
//                                                 Long companyId,
//                                                 Long typeCode,
//                                                 String terminal,
//                                                 String meter);
//
//    Map<Long, List<Long>> findStationPointNumber(Long firmId,
//                                                 Long stationId,
//                                                 Long typeCode,
//                                                 String terminal,
//                                                 String meter);
//
//    List<String> getMeterList(Long companyId,
//                              String terminal);
//
//    /**
//     * 根据厂房编号获得点号列表
//     * @param officeName 厂房编号
//     * @return Iterable<Analog>
//     */
//    Iterable<Analog> searchByOfficeName(String officeName);
//}
